/*
 * PPD.c
 *
 *  Created on: 15/09/2011
 *      Author: agustin
 */


/*
#include "funcionesDeConsola.h"
#include "CHS.h"
#include "algoritmoPPD.h"
#include "abriryleer.h"
#include "estructurasCola.h"

extern uint16_t posActualCabezal;

uint8_t abrirArchivo(char *filepath, struct stat *datos) {
	uint8_t archivo;
	uint16_t sizeofpage;
	archivo = open(filepath, O_RDWR);
	if (archivo < 0) {
		perror("No se puede abrir el archivo");
	};
	sizeofpage = getpagesize();
	posix_madvise(NULL, sizeofpage, MADV_SEQUENTIAL);
	stat(filepath, datos);
	return archivo;
}

char *leerSector(uint16_t n_sector, struct stat estado, uint8_t archivo) {
	char *data;
	static char buffer[512];
	uint16_t sizeofpage, offset;
	uint32_t NroPagina;
	sizeofpage = getpagesize();
	NroPagina = (n_sector / 8) * sizeofpage; // Cociente de la division //
	offset = (n_sector % 8) * 512; // Resto de la division //
	data = (char *) mmap(NULL, estado.st_size, PROT_READ, MAP_SHARED, archivo,
			NroPagina);
	data += offset;
	memcpy(buffer, data, 512);
	munmap(data, sizeofpage);
	posActualCabezal = n_sector + 1;
	return buffer;
}

void escribirSector(uint16_t n_sector, uint8_t archivo, struct stat estado,
		char* datos, uint16_t longitud_datos) {
	char *data;
	uint16_t sizeofpage, offset;
	uint32_t NroPagina;
	sizeofpage = getpagesize();
	NroPagina = (n_sector / 8) * sizeofpage; // Cociente de la division //
	offset = (n_sector % 8) * 512; // Resto de la division //
	data = (char *) mmap(NULL, estado.st_size, PROT_READ | PROT_WRITE
	, MAP_SHARED, archivo, NroPagina);
	memcpy(data + offset, datos, longitud_datos);
	msync(data, sizeofpage, MS_SYNC);
	munmap(data, sizeofpage);
	posActualCabezal = n_sector + 1;
}*/
